/**
 * DMonServer.java
 *
 * @author Alex Tough (07-41604)
 * @author Carlos Colmenares (06-39380)
 *
 * Servidor que crea un objeto dmon y da un servicio de consola
 * para consultar características del DMon
 */

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.rmi.registry.LocateRegistry;
import java.rmi.Naming;

public class DMonServer {

    public static DMonImpl miDMon;

    public static void main(String[] args) {
        String RMIURL="";
        try {
            miDMon = new DMonImpl(args);
            LocateRegistry.createRegistry(miDMon.getPuertoDMon());

            RMIURL = "rmi://localhost:"+miDMon.getPuertoDMon()+"/dmon";

            Naming.rebind(RMIURL, miDMon);
            if(miDMon.isVerboso()){
                System.out.println("El DMon ha sido enlazado al "+
                        "registro RMI");
            }
        } catch (Exception e) {
            //System.err.println("Error en la ejecución de DRep en el puerto: "
            //        +miDRep.getPuertoDRep());
            e.printStackTrace();
            System.exit(1);
        }

        //Ahora se hace el prompt y se reciben comandos desde la consola

        BufferedReader in =
            new BufferedReader(
                new InputStreamReader(System.in));
        try {
            while(true){
                System.out.print("dmon> ");
                String comando = in.readLine();

                comando = comando.trim();

                if(comando.length()==0)
                    continue;

                else if(comando.equals("ayuda")){
                    System.out.println(
                            "Ingrese el comando que desee que sea ejecutado, los "+
                            "comandos reconocidos son los siguientes:"
                            );
                    System.out.println();
                    System.out.println(
                            "\tayuda:    Imprime este menú"        
                            );
                    System.out.println();
                    System.out.println(
                            "\ttuser:    Muestra una lista de todos los usuarios "+
                            "conectados al sistema"
                            );
                    System.out.println();
                    System.out.println(
                            "\tnops:     Muestra el número de Down/Uploads que se "+
                            "han realizado desde todos los DReps conectados a este DMon"
                            );
                    System.out.println();
                    System.out.println(
                            "\tsalir:    Terminar el programa y todos sus hilos"
                            );

                }
                else if(comando.equals("salir")){
                    Naming.unbind(RMIURL);
                    break;
                }
                else if(comando.equals("tuser")){
                    String[] lista = miDMon.tuser();
                    for(int i=0;i<lista.length;i++){
                        System.out.println(lista[i]);
                    }
                }
                else if(comando.equals("nops")){
                    System.out.println("Num. total de Uploads: "
                            +miDMon.getUploads());
                    System.out.println("Num. total de Downloads: "
                            +miDMon.getDownloads());
                }

            }

            in.close();
            System.exit(0);
        
        } catch(IOException e) {
            System.err.println("Error de Entrada/Salida");
            e.printStackTrace();
            System.exit(1);
        } catch(java.rmi.NotBoundException e){
            System.err.println("Error con el registro RMI");
            System.err.println(e);
        }
    }


}
